package com.example.testapp.config

import android.content.Context
import android.graphics.Color
import android.util.Log
import com.example.testapp.config.model.AppConfig

/**
 * 配置辅助类，提供配置项的便捷访问方法
 * 封装了对ConfigManager的调用，提供了一些常用的配置获取和设置方法
 */
object ConfigHelper {
    private const val TAG = "ConfigHelper"
    
    /**
     * 获取API基础URL
     * @param context 上下文
     * @return API基础URL
     */
    @JvmStatic
    fun getApiBaseUrl(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().apiBaseUrl
    }
    
    /**
     * 设置API基础URL
     * @param context 上下文
     * @param url 新的URL
     * @return 是否设置成功
     */
    @JvmStatic
    fun setApiBaseUrl(context: Context, url: String): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.apiBaseUrl = url
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取API超时设置（毫秒）
     * @param context 上下文
     * @return API超时时间
     */
    @JvmStatic
    fun getApiTimeout(context: Context): Int {
        return ConfigManager.getInstance(context).getConfig().apiTimeout
    }
    
    /**
     * 设置API超时时间
     * @param context 上下文
     * @param timeout 超时时间（毫秒）
     * @return 是否设置成功
     */
    @JvmStatic
    fun setApiTimeout(context: Context, timeout: Int): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.apiTimeout = timeout
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 是否启用暗黑模式
     * @param context 上下文
     * @return 是否启用
     */
    @JvmStatic
    fun isDarkModeEnabled(context: Context): Boolean {
        return ConfigManager.getInstance(context).getConfig().darkModeEnabled
    }
    
    /**
     * 设置暗黑模式
     * @param context 上下文
     * @param enabled 是否启用
     * @return 是否设置成功
     */
    @JvmStatic
    fun setDarkModeEnabled(context: Context, enabled: Boolean): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.darkModeEnabled = enabled
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取主题颜色
     * @param context 上下文
     * @return 颜色值
     */
    @JvmStatic
    fun getThemeColor(context: Context): Int {
        val colorHex = ConfigManager.getInstance(context).getConfig().themeColor
        return try {
            Color.parseColor(colorHex)
        } catch (e: IllegalArgumentException) {
            Log.e(TAG, "解析颜色失败: $colorHex", e)
            Color.parseColor("#2196F3") // 默认蓝色
        }
    }
    
    /**
     * 设置主题颜色
     * @param context 上下文
     * @param colorHex 颜色十六进制值（如 "#FF0000"）
     * @return 是否设置成功
     */
    @JvmStatic
    fun setThemeColor(context: Context, colorHex: String): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.themeColor = colorHex
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 重置所有配置为默认值
     * @param context 上下文
     * @return 是否重置成功
     */
    @JvmStatic
    fun resetAllConfigs(context: Context): Boolean {
        return ConfigManager.getInstance(context).resetToDefault()
    }
    
    /**
     * 保存图片识别API配置
     * @param context 上下文
     * @param provider 服务提供商
     * @param url API地址
     * @param key API密钥
     * @return 是否保存成功
     */
    @JvmStatic
    fun saveImageApiConfig(context: Context, provider: String, url: String, key: String): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.imageApiProvider = provider
        config.imageApiUrl = url
        config.imageApiKey = key
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取图片识别API提供商
     * @param context 上下文
     * @return 服务提供商名称
     */
    @JvmStatic
    fun getImageApiProvider(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().imageApiProvider
    }
    
    /**
     * 获取图片识别API地址
     * @param context 上下文
     * @return API地址
     */
    @JvmStatic
    fun getImageApiUrl(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().imageApiUrl
    }
    
    /**
     * 获取图片识别API密钥
     * @param context 上下文
     * @return API密钥
     */
    @JvmStatic
    fun getImageApiKey(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().imageApiKey
    }
    
    /**
     * 保存AI API配置
     * @param context 上下文
     * @param provider 服务提供商
     * @param url API地址
     * @param key API密钥
     * @return 是否保存成功
     */
    @JvmStatic
    fun saveAiApiConfig(context: Context, provider: String, url: String, key: String): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.aiApiProvider = provider
        config.aiApiUrl = url
        config.aiApiKey = key
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取AI API提供商
     * @param context 上下文
     * @return 服务提供商名称
     */
    @JvmStatic
    fun getAiApiProvider(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().aiApiProvider
    }
    
    /**
     * 获取AI API地址
     * @param context 上下文
     * @return API地址
     */
    @JvmStatic
    fun getAiApiUrl(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().aiApiUrl
    }
    
    /**
     * 获取AI API密钥
     * @param context 上下文
     * @return API密钥
     */
    @JvmStatic
    fun getAiApiKey(context: Context): String {
        return ConfigManager.getInstance(context).getConfig().aiApiKey
    }
    
    /**
     * 设置自动备份开关
     * @param context 上下文
     * @param enabled 是否启用
     * @return 是否设置成功
     */
    @JvmStatic
    fun setAutoBackupEnabled(context: Context, enabled: Boolean): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.autoBackupEnabled = enabled
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取自动备份开关状态
     * @param context 上下文
     * @return 是否启用
     */
    @JvmStatic
    fun isAutoBackupEnabled(context: Context): Boolean {
        return ConfigManager.getInstance(context).getConfig().autoBackupEnabled
    }
    
    /**
     * 设置记账提醒开关
     * @param context 上下文
     * @param enabled 是否启用
     * @return 是否设置成功
     */
    @JvmStatic
    fun setAccountingReminderEnabled(context: Context, enabled: Boolean): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.accountingReminderEnabled = enabled
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取记账提醒开关状态
     * @param context 上下文
     * @return 是否启用
     */
    @JvmStatic
    fun isAccountingReminderEnabled(context: Context): Boolean {
        return ConfigManager.getInstance(context).getConfig().accountingReminderEnabled
    }
    
    /**
     * 设置快递单据识别开关
     * @param context 上下文
     * @param enabled 是否启用
     * @return 是否设置成功
     */
    @JvmStatic
    fun setExpressRecognitionEnabled(context: Context, enabled: Boolean): Boolean {
        val config = ConfigManager.getInstance(context).getConfig()
        config.expressRecognitionEnabled = enabled
        return ConfigManager.getInstance(context).saveConfig()
    }
    
    /**
     * 获取快递单据识别开关状态
     * @param context 上下文
     * @return 是否启用
     */
    @JvmStatic
    fun isExpressRecognitionEnabled(context: Context): Boolean {
        return ConfigManager.getInstance(context).getConfig().expressRecognitionEnabled
    }
} 